<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="[TOC]
SSH 隧道 公共参数 # Fork into background after authentication. # 后台认证用户/密码，通常和-N连用，不用登录到远程主机 -f # Enable compression. # 压缩数据传输。 -C # Do not execute a shell or command. # 不执行脚本或命令，通常与-f连用。 -N # Allow remote hosts to connect to forwarded ports. # 允许远程主机连接到建立的转发的端口 -g 本地端口转发 -L 将 本地/跳板机 的某个端口通过跳板机转发到远端指定机器的指定端口。
格式 ：（本机/跳板机）  ssh -Nfg -L &lt;执行的机器port&gt;:&lt;受限机IP&gt;:&lt;受限机port&gt; &lt;跳板机IP&gt;
**访问方式 ：（本机）**&lt;执行的机器IP&gt;:&lt;执行的机器port&gt; &ndash;&gt; &lt;受限机IP&gt;:&lt;受限机port&gt;
 动态端口转发 -D 动态端口允许通过配置一个本地端口，把通过隧道的数据转发到远端的所有地址。相当于一个 socks5 代理
格式 ：（本机/代理机）  ssh -Nfg -D [bind_address]:&lt;代理端口&gt; &lt;username&gt;@&lt;跳板机IP/提供代理服务的机器IP&gt; 访问方式 ：（随便一台机器） curl --socks5 &lt;跳板机IP/提供代理服务的机器IP&gt;:&lt;代理端口&gt; http://www."><meta property="og:title" content="" />
<meta property="og:description" content="[TOC]
SSH 隧道 公共参数 # Fork into background after authentication. # 后台认证用户/密码，通常和-N连用，不用登录到远程主机 -f # Enable compression. # 压缩数据传输。 -C # Do not execute a shell or command. # 不执行脚本或命令，通常与-f连用。 -N # Allow remote hosts to connect to forwarded ports. # 允许远程主机连接到建立的转发的端口 -g 本地端口转发 -L 将 本地/跳板机 的某个端口通过跳板机转发到远端指定机器的指定端口。
格式 ：（本机/跳板机）  ssh -Nfg -L &lt;执行的机器port&gt;:&lt;受限机IP&gt;:&lt;受限机port&gt; &lt;跳板机IP&gt;
**访问方式 ：（本机）**&lt;执行的机器IP&gt;:&lt;执行的机器port&gt; &ndash;&gt; &lt;受限机IP&gt;:&lt;受限机port&gt;
 动态端口转发 -D 动态端口允许通过配置一个本地端口，把通过隧道的数据转发到远端的所有地址。相当于一个 socks5 代理
格式 ：（本机/代理机）  ssh -Nfg -D [bind_address]:&lt;代理端口&gt; &lt;username&gt;@&lt;跳板机IP/提供代理服务的机器IP&gt; 访问方式 ：（随便一台机器） curl --socks5 &lt;跳板机IP/提供代理服务的机器IP&gt;:&lt;代理端口&gt; http://www." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://hello-world-example.github.io/linux/docs/200_Command/230_Network/ssh/turnnel/" />
<meta property="article:modified_time" content="2022-12-11T01:38:37+08:00" />
<title>Turnnel | Linux</title>
<link rel="icon" href="/linux/favicon.png" type="image/x-icon">


<link rel="stylesheet" href="/linux/book.min.00b8e784201abfe629a6e0741e94bf44575af8612aec171d94e4ecbd3692cf5c.css" integrity="sha256-ALjnhCAav&#43;YppuB0HpS/RFda&#43;GEq7BcdlOTsvTaSz1w=">


<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->

  
</head>

<body>
  <input type="checkbox" class="hidden" id="menu-control" />
  <main class="container flex">
    <aside class="book-menu">
      
  <nav>
<h2 class="book-brand">
  <a href="/linux"><span>Linux</span>
  </a>
</h2>












  

  
  





 
  
    




  
  <ul>
    
      
        

  <li>
    

  
  <a href="/linux/docs/100_Shell/" class="collapsed ">Shell</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/" class="collapsed ">Command</a>
  


    




  
  <ul>
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/210_Common/" class="collapsed ">常用工具</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/220_Troubleshooting/" class="collapsed ">故障排查</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/230_Network/" class="collapsed ">Network</a>
  


    




  
  <ul>
    
      
        <li>

  
  <a href="/linux/docs/200_Command/230_Network/ssh/" class="">Ssh</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/200_Command/230_Network/ssh/turnnel/" class="active">Turnnel</a>
  

</li>
      
    
      
        <li>

  
  <a href="/linux/docs/200_Command/230_Network/tcpdump/" class="">Tcpdump</a>
  

</li>
      
    
  </ul>
  



  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/240_Disk/" class="collapsed ">磁盘</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/250_String/" class="collapsed ">字符串操作</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/260_Auth/" class="collapsed ">账户权限</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/270_Package/" class="collapsed ">Package..</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/280_System/" class="collapsed ">系统管理</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/200_Command/290_Compression/" class="collapsed ">解压缩</a>
  


    






  </li>


      
    
  </ul>
  



  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/300_Configuration/" class="collapsed ">文件和配置</a>
  


    






  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/900_FAQ/" class="">FAQ</a>
  


    




  
  <ul>
    
  </ul>
  



  </li>


      
    
      
        

  <li>
    

  
  <a href="/linux/docs/999_Links/" class="">Links 🔗</a>
  


    




  
  <ul>
    
  </ul>
  



  </li>


      
    
  </ul>
  



  
















</nav>




  <script>(function(){var menu=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(event){localStorage.setItem("menu.scrollTop",menu.scrollTop);});menu.scrollTop=localStorage.getItem("menu.scrollTop");})();</script>


 
    </aside>

    <div class="book-page">
      <header class="book-header">
        
  <div class="flex align-center justify-between">
  <label for="menu-control">
    <img src="/linux/svg/menu.svg" class="book-icon" alt="Menu" />
  </label>

  <strong>Turnnel</strong>

  <label for="toc-control">
    <img src="/linux/svg/toc.svg" class="book-icon" alt="Table of Contents" />
  </label>
</div>


  
    <input type="checkbox" class="hidden" id="toc-control" />
    <aside class="hidden clearfix">
      
  <nav id="TableOfContents">
  <ul>
    <li><a href="#ssh-隧道">SSH 隧道</a>
      <ul>
        <li><a href="#公共参数">公共参数</a></li>
        <li><a href="#本地端口转发--l">本地端口转发 <code>-L</code></a></li>
        <li><a href="#动态端口转发--d">动态端口转发 <code>-D</code></a></li>
        <li><a href="#远端端口转发--r">远端端口转发 <code>-R</code></a></li>
        <li><a href="#使用技巧">使用技巧</a>
          <ul>
            <li><a href="#保持长时间链接">保持长时间链接</a></li>
          </ul>
        </li>
        <li><a href="#常见错误">常见错误</a>
          <ul>
            <li><a href="#channel-1-open-failed-administratively-prohibited-open-failed">channel 1: open failed: administratively prohibited: open failed</a></li>
          </ul>
        </li>
        <li><a href="#read-more">Read More</a></li>
      </ul>
    </li>
  </ul>
</nav>


    </aside>
  
 
      </header>

      
      
  <article class="markdown"><p>[TOC]</p>
<h1 id="ssh-隧道">SSH 隧道</h1>
<h2 id="公共参数">公共参数</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e"># Fork into background after authentication.</span> 
<span style="color:#75715e"># 后台认证用户/密码，通常和-N连用，不用登录到远程主机</span>
-f

<span style="color:#75715e"># Enable compression.</span> 
<span style="color:#75715e"># 压缩数据传输。</span>
-C 
 
<span style="color:#75715e"># Do not execute a shell or command.</span> 
<span style="color:#75715e"># 不执行脚本或命令，通常与-f连用。</span>
-N 

<span style="color:#75715e"># Allow remote hosts to connect to forwarded ports.</span> 
<span style="color:#75715e"># 允许远程主机连接到建立的转发的端口</span>
-g
</code></pre></div><h2 id="本地端口转发--l">本地端口转发 <code>-L</code></h2>
<p><strong>将 <code>本地/跳板机</code> 的某个端口<code>通过跳板机</code>转发到远端指定机器的指定端口</strong>。</p>
<p><strong>格式 ：（本机/跳板机）</strong> <code> ssh -Nfg -L &lt;执行的机器port&gt;:&lt;受限机IP&gt;:&lt;受限机port&gt; &lt;跳板机IP&gt;</code></p>
<p>**访问方式 ：（本机）**<code>&lt;执行的机器IP&gt;:&lt;执行的机器port&gt;</code> &ndash;&gt; <code>&lt;受限机IP&gt;:&lt;受限机port&gt;</code></p>
<hr>
<h2 id="动态端口转发--d">动态端口转发 <code>-D</code></h2>
<p>动态端口允许通过配置一个本地端口，把通过隧道的数据转发到远端的所有地址。<strong>相当于一个 socks5 代理</strong></p>
<p><strong>格式 ：（本机/代理机）</strong> <code> ssh -Nfg -D [bind_address]:&lt;代理端口&gt; &lt;username&gt;@&lt;跳板机IP/提供代理服务的机器IP&gt;</code>
<strong>访问方式 ：（随便一台机器）</strong>  <code>curl --socks5 &lt;跳板机IP/提供代理服务的机器IP&gt;:&lt;代理端口&gt; http://www.baidu.com</code></p>
<hr>
<h2 id="远端端口转发--r">远端端口转发 <code>-R</code></h2>
<p><strong>格式：(在内网机器执行)</strong> <code>ssh -Nfg -R &lt;外网机器port&gt;:&lt;内网机IP&gt;:&lt;内网机port&gt; &lt;外网机器IP&gt;</code>
<strong>访问方式（在外网机器） ：</strong> <code>访问内网  &lt;外网机器IP&gt;:&lt;外网机器port&gt;</code></p>
<hr>
<h2 id="使用技巧">使用技巧</h2>
<h3 id="保持长时间链接">保持长时间链接</h3>
<p>ssh 加上 <code>-o TCPKeepAlive=yes</code> 参数</p>
<h2 id="常见错误">常见错误</h2>
<h3 id="channel-1-open-failed-administratively-prohibited-open-failed">channel 1: open failed: administratively prohibited: open failed</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e"># 1. 修改 ssh 配置文件</span>
vim /etc/ssh/sshd_config

<span style="color:#75715e"># 2. AllowTcpForwarding 改为 yes</span>

<span style="color:#75715e"># 3. 重启 sshd</span>
service sshd restart

</code></pre></div><h2 id="read-more">Read More</h2>
<blockquote>
<p>
  <a href="http://blog.creke.net/722.html">SSH隧道与端口转发及内网穿透</a></p>
</blockquote>
</article>
 
      

      <footer class="book-footer">
        
  <div class="flex justify-between">



  <div>
    
    <a class="flex align-center" href="https://github.com/hello-world-example/Linux/commit/d07f642a1d3d369f2ee692c45224763cdf4a7f29" title='Last modified by kaibin.yang | Dec 11, 2022' target="_blank" rel="noopener">
      <img src="/linux/svg/calendar.svg" class="book-icon" alt="Calendar" />
      <span>Dec 11, 2022</span>
    </a>
  </div>



  <div>
    <a class="flex align-center" href="https://github.com/hello-world-example/Linux/edit/master/HuGo/content/docs/200_Command/230_Network/ssh/turnnel.md" target="_blank" rel="noopener">
      <img src="/linux/svg/edit.svg" class="book-icon" alt="Edit" />
      <span>Edit this page</span>
    </a>
  </div>

</div>

 
        <script>
    var images = document.getElementsByTagName("img")
    for (var i = 0; i < images.length; i++) {
        var image = images[i]
        var src = image.getAttribute("src");
         
        if (src.startsWith("-images")) {
            image.setAttribute("src", "../" + src)
        }
         
        if (window.location.href.indexOf("/posts/")) {
            src = src.replace("../drawio/", "../../drawio/")
            image.setAttribute("src", src)
        }
         
        if (src.startsWith("../drawio/")) {
            image.setAttribute("src", src.replace("../drawio/", "../"))
        }

         
        if(src.indexOf("/svg/") < 0){
             
            image.onclick = function (e) {
                window.open(e.target.getAttribute("src"))
            }
        }
    }

</script>

      </footer>

      
  
  <div class="book-comments">

</div>
  
 

      <label for="menu-control" class="hidden book-menu-overlay"></label>
    </div>

    
    <aside class="book-toc">
      
  <nav id="TableOfContents">
  <ul>
    <li><a href="#ssh-隧道">SSH 隧道</a>
      <ul>
        <li><a href="#公共参数">公共参数</a></li>
        <li><a href="#本地端口转发--l">本地端口转发 <code>-L</code></a></li>
        <li><a href="#动态端口转发--d">动态端口转发 <code>-D</code></a></li>
        <li><a href="#远端端口转发--r">远端端口转发 <code>-R</code></a></li>
        <li><a href="#使用技巧">使用技巧</a>
          <ul>
            <li><a href="#保持长时间链接">保持长时间链接</a></li>
          </ul>
        </li>
        <li><a href="#常见错误">常见错误</a>
          <ul>
            <li><a href="#channel-1-open-failed-administratively-prohibited-open-failed">channel 1: open failed: administratively prohibited: open failed</a></li>
          </ul>
        </li>
        <li><a href="#read-more">Read More</a></li>
      </ul>
    </li>
  </ul>
</nav>

 
    </aside>
    
  </main>

  
</body>

</html>












